package control;

import entidad.Clientes;
import entidad.Sistema;
import frontera.FramePrincipal1;
import java.util.ArrayList;


/**
 * Clase control encargada de la logica del negocio para la clase Clientes.
 *
 * @package     entidad.
 * @author      Andres Silva
 *              Alejandro
 *              Francisco Monasterio
 *              Juan Felipe Sarmiento
 *              Giovanny Ricardo Rodriguez Chitiva.
 *
 * @version     0.4.
 * @see         Nothing.
 * @copyright   2010.
 */
public class ClientesCTR {
	 private CheckInCTR controlCheckin = new CheckInCTR();
    /**
     * Mensaje proporcionado cuando un cliente es insertado con exito.
     *
     * @access  Public Static
     * @var     String
    */
    public static String insert_ok = "Operacion de inserción [OK] : \n Cliente Insertado con éxito.";
	ArrayList<Clientes> clientes = new ArrayList<Clientes>();
    /**
     * Constructor de la clase.
     *
     * @access      Public
     * @param       null.
     * @return      null
     * @exception   null
     * @throws      null
    */
    public void ClientesCTR(){}

    /**
     * Agrega un nuevo Cliente al sistema.
     *
     * @access      Public
     * @param       Clientes, detalles del cliente a agregar.
     * @return      null
     * @exception   null
     * @throws      null
    */
    public void add_cliente(Clientes _cliente){
        Sistema.add_cliente(_cliente);
    }

    /**
     * Elimina un Cliente del sistema.
     *
     * @access      Public
     * @param       Integer, numero del documento del cliente.
     * @return      null
     * @exception   null
     * @throws      null
    */
    public void delete_cliente(int _cedula ){
        Sistema.delete_cliente(_cedula);
    }

    /**
     * Muestra por cosola el listado de clientes del sistema.
     *
     * @access      Public
     * @param       null.
     * @return      null
     * @exception   null
     * @throws      null
    */
    public void debug_clientes(){
        Sistema.debug_clientes();
    }

    /**
     * Agrega un listado de Clientes al sistema.
     *
     * @access      Public
     * @param       ArrayList<Clientes>, listado de clientes a agregar.
     * @return      null
     * @exception   null
     * @throws      null
    */
    public void setClientes(ArrayList<Clientes> _clientes){
        Sistema.setClientes(_clientes);
    }

    /**
     * Retorna listado de clientes existentes del sistema.
     *
     * @access      Public
     * @return      ArrayList<Clientes>
     * @exception   null
     * @throws      null
    */
    public ArrayList<Clientes> getClientes(){
        return Sistema.getClientes();
    }

    /**
     * Busca un Cliente en el sistema.
     *
     * @access      Public
     * @param       Integer, numero del documento de identificacion del cliente.
     * @return      Clientes, detalles del cliente buscado
     * @exception   null
     * @throws      null
    */
    public Clientes search_cliente(int _cedula ){
        return Sistema.search_cliente(_cedula);
    }

    /**
     * Busca la ubicacion en el listado de clientes, de un cliente especifico.
     *
     * @access      Public
     * @param       Integer, numero de cedula del cliente.
     * @return      Integer, indice del array donde se encuentra el cliente
     * @exception   null
     * @throws      null
    */
    public int search_cliente_by_index(int _cedula){
        return Sistema.search_cliente_by_index(_cedula);
    }

    /**
     * Busca un cliente en el sistema
     *
     * @access      Static Public
     * @param       String, nombre del cliente.
     * @return      Clientes, detalles del cliente buscado
     * @exception   null
     * @throws      null
    */
    public Clientes search_cliente(String _nombre ){
        return Sistema.search_cliente(_nombre);
    }
       
    /**
     * Busca un cliente en el sistema
     *
     * @access      Static Public
     * @param       String, nombre del cliente.
     * @return      Clientes, detalles del cliente buscado
     * @exception   null
     * @throws      null
    */
    public Clientes getclienteByCC(int cc){
        for(Clientes c : getClientes()){
            if(c.getCedula()==cc) return c;
        }
        return null;   
 	}
/**
     * validarCheckInCliente
     * Obtiene un objeto de tipo Cliente pasando la Cedula
     */
    public Clientes validarCheckInCliente(int cc){
        for(Clientes c : getClientes()){
            if(c.getCedula()==cc && !controlCheckin.validarCheckIn(c)) return c;
        }
        return null;
    }

    public boolean verificarCedula(String cedula){
        if(this.verificarLongitudCedula(cedula)){
            if(Sistema.isNumeric(cedula)){
                return true;
            }
            else{
                return false;
            }
        }
        else{
            return false;
        }

    }

    public Boolean verificarLongitudCedula(String cedula) {
        if(cedula.isEmpty()){
            return false;
        }
        else{
            return (cedula.length() > 5 && cedula.length() <= 10)? true:false;
        }
    }
}